#ifndef SELFINFOWIDGET_H
#define SELFINFOWIDGET_H

#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QWidget>

class QGridLayout;

class SelfInfoWidget : public QDialog
{
    Q_OBJECT

public:
    struct VerifyCodeInfo
    {
        QLabel* key;          // 验证码
        QLineEdit* lineEdit;  // 验证码的内容
        QPushButton* getCodeBtn;  // 获取验证码按钮
        VerifyCodeInfo();
        void show();
        void hide(/*QGridLayout* layout*/);
    };

    struct InfoLine
    {
        QLabel* key;                // 程序固定的昵称标识
        QLabel* val;                // 用户指定昵称的内容
        QLineEdit* lineEdit;        // 修改昵称
        QPushButton* modifyBtn;     // 修改按钮
        QPushButton* submitBtn;     // 修改完的提交按钮
        VerifyCodeInfo* verifyCodeInfo;     // phone编辑下的验证码特有, 其它时候为null

        InfoLine(const QString& keyString);
    };

public:
    SelfInfoWidget(QWidget* parent);

private:
    void initSignals();

    void onClickedByModifyBtn(InfoLine* infoLine, int row, int col);

    void onClickedByNameSubmitBtn();
    void onClickedByDescSubmitBtn();
    void onClickedByPhoneSubmitBtn();
    void onClickedBygetCodeBtn();
    void onClickedByAvatarBtn();

    void clickNameSubmitBtnDone();
    void clickDescSubmitBtnDone();
    void clickPhoneSubmitBtnDone();
    void clickAvatarBtnDone();

    static QLabel* createKeyLabel(const QString& keyString);
    static QLabel* createValLabel();
    static QLineEdit* createLineEdit();
    static QPushButton* createButton(const QSize& fixedSize, const QSize& iconSize, const QIcon& icon);

    static const QString& labelStyle();
    static const QString& buttonStyle();
    static const QString& lineEditStyle();

    static const QIcon& modifyIcon();
    static const QIcon& submitIcon();

    static const QSize& labelSize();
    static const QSize& btnFixedSize();
    static const QSize& btnIconSize();

private:
    QGridLayout* layout;

    QPushButton* avatarBtn;

    QLabel* idKey;
    QLabel* idVal;

    InfoLine* nameInfo;
    InfoLine* descInfo;
    InfoLine* phoneInfo;

    QString phoneToChange;
    QTimer* verifyCodeTimer = nullptr;
    int remainTime = 30;        // 下次可发送验证码的剩余时间

};

#endif // SELFINFOWIDGET_H
